Compression of data has been already considered in the field of non-volatile semiconductor storage devices such as SSD (Solid State Drive). Different data compression efficiencies are observed depending on the data pattern of user data. For example, in Huffman coding, which is a common reversible compression coding technique, different data patterns are detected and a short code is assigned to each data pattern according its frequency to perform compression. Huffman coding is applied in common compression protocols such as ZIP. That is, when compression based on Huffman coding is used, from a practical point of view, good compression efficiency is achieved with “data having a limited number of patterns” such as text files or “data formed by the same patterns” such as 0 padding data for padding of sector alignment.